--TEST--
bool MySQLndUhConnection::reapQuery(resource $connection)
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
	require_once('config.inc');

	class proxy extends MySQLndUhConnection {
		public function reapQuery($res) {
			printf("%s(%s)\n", __METHOD__, var_export(func_get_args(), true));
			return parent::reapQuery($res);
		}
	}

	$conn1 = mysqlnd_uh_test\connect::mysqli();
	$conn2 = mysqlnd_uh_test\connect::mysqli();
	mysqlnd_uh_test\query_test::mysqli($conn1);
	if (true != ($tmp = $conn1->query("SELECT 1 as 'one', SLEEP(1) AS _sleep FROM DUAL", MYSQLI_ASYNC |  MYSQLI_USE_RESULT)))
		printf("[001] Expecting true got %s\n", var_export($tmp));

	if (true != ($tmp = $conn2->query("SELECT 1.1 as 'one dot one' FROM DUAL", MYSQLI_ASYNC |  MYSQLI_USE_RESULT)))
		printf("[002] Expecting true got %s\n", var_export($tmp));

	$links = array(
		$conn1->thread_id => array('link' => $conn1, 'processed' => false),
		$conn2->thread_id => array('link' => $conn2, 'processed' => false)
	);

	$saved_errors = array();
	do {
		$poll_links = $poll_errors = $poll_reject = array();
		foreach ($links as $thread_id => $link) {
			if (!$link['processed']) {
				$poll_links[] = $link['link'];
				$poll_errors[] = $link['link'];
				$poll_reject[] = $link['link'];
			}
		}
		if (0 == count($poll_links))
			break;

		if (0 == ($num_ready = mysqli_poll($poll_links, $poll_errors, $poll_reject, 0, 200000)))
			continue;

		if (!empty($poll_errors)) {
			die(var_dump($poll_errors));
		}

		foreach ($poll_links as $link) {
			$thread_id = mysqli_thread_id($link);
			$links[$thread_id]['processed'] = true;

			if (is_object($res = mysqli_reap_async_query($link))) {
				// result set object
				while ($row = mysqli_fetch_assoc($res)) {
					// eat up all results
					var_dump($row);
				}
				mysqli_free_result($res);
			} else {
				// either there is no result (no SELECT) or there is an error
				if (mysqli_errno($link) > 0) {
					$saved_errors[$thread_id] = mysqli_errno($link);
					printf("[003] '%s' caused %d\n", $links[$thread_id]['query'],	mysqli_errno($link));
				}
			}
		}

	} while (true);

	mysqlnd_uh_set_connection_proxy(new proxy());
	mysqlnd_uh_test\query_test::mysqli($conn1);

	if (true != ($tmp = $conn1->query("SELECT 1 as 'one', SLEEP(1) AS _sleep FROM DUAL", MYSQLI_ASYNC |  MYSQLI_USE_RESULT)))
		printf("[004] Expecting true got %s\n", var_export($tmp));

	if (true != ($tmp = $conn2->query("SELECT 1.1 as 'one dot one' FROM DUAL", MYSQLI_ASYNC |  MYSQLI_USE_RESULT)))
		printf("[005] Expecting true got %s\n", var_export($tmp));


	$links = array(
		$conn1->thread_id => array('link' => $conn1, 'processed' => false),
		$conn2->thread_id => array('link' => $conn2, 'processed' => false)
	);

	$saved_errors = array();
	do {
		$poll_links = $poll_errors = $poll_reject = array();
		foreach ($links as $thread_id => $link) {
			if (!$link['processed']) {
				$poll_links[] = $link['link'];
				$poll_errors[] = $link['link'];
				$poll_reject[] = $link['link'];
			}
		}
		if (0 == count($poll_links))
			break;

		if (0 == ($num_ready = mysqli_poll($poll_links, $poll_errors, $poll_reject, 0, 200000)))
			continue;

		if (!empty($poll_errors)) {
			die(var_dump($poll_errors));
		}

		foreach ($poll_links as $link) {
			$thread_id = mysqli_thread_id($link);
			$links[$thread_id]['processed'] = true;

			if (is_object($res = mysqli_reap_async_query($link))) {
				// result set object
				while ($row = mysqli_fetch_assoc($res)) {
					// eat up all results
					var_dump($row);
				}
				mysqli_free_result($res);
			} else {
				// either there is no result (no SELECT) or there is an error
				if (mysqli_errno($link) > 0) {
					$saved_errors[$thread_id] = mysqli_errno($link);
					printf("[006] '%s' caused %d\n", $links[$thread_id]['query'],	mysqli_errno($link));
				}
			}
		}

	} while (true);

	mysqlnd_uh_test\query_test::mysqli($conn1);

	print "done!";
?>
--EXPECTF--
array(1) {
  ["one dot one"]=>
  string(3) "1.1"
}
array(2) {
  ["one"]=>
  string(1) "1"
  ["_sleep"]=>
  string(1) "0"
}
proxy::reapQuery(array (
  0 => NULL,
))
array(1) {
  ["one dot one"]=>
  string(3) "1.1"
}
proxy::reapQuery(array (
  0 => NULL,
))
array(2) {
  ["one"]=>
  string(1) "1"
  ["_sleep"]=>
  string(1) "0"
}
done!